Running multiple game instances on a single computer system (e.g., server) is often very advantageous in that it allows for efficient utilization of system resources (e.g., processor, memory, storage, input/output (I/O) devices, audio/video, network resources, etc.). However, running multiple game instances on a single computer system poses significant problems when attempting to maintain simultaneous game functionality for each of the game instances.
Using the Windows operating system as an example, when multiple game instances are running simultaneously on a single operating system, only a single game instance is given complete access to the necessary system resources at one time. For example, the game instance running in the foreground is given access to I/O devices (e.g., keyboard, mouse, audio, etc.), while game instances running in the background are not allowed access to the input/output devices. This is to ensure that contention for certain system resources does not occur. However, by only allowing a single game instance to have access to all necessary system resources, other game instances running on the computer system are unable to maintain full game functionality. For example, game instances running in the background are not granted access to certain I/O devices (e.g., keyboard and mouse) and thus cannot perform certain actions (e.g., using I/O devices, using system audio/video, etc.) to maintain full game functionality. Because game programs are written to have access to all of the necessary resources of a computer system in order to maintain full game functionality, a game instance running in the background cannot maintain full game functionality because it is unable to access all the necessary resources of the computer system as some of those resources are being used exclusively by the game instance running the foreground.
Prior approaches for allowing multiple games instances to share resources while maintaining full game functionality have involved virtualizing the computer system such that a plurality of virtual machines may each run a single game instance as if it is the only game instance on the machine. However, installing full virtual machines on a computer system is often very expensive and resource intensive. For example, a separate operating system instance is needed for each virtual machine, leading to consumption of additional computer system resources which could instead be used for running additional game instances.
Therefore there is a desire for an improved approach for allowing multiple game instances running on a computer system to maintain full game functionality without requiring the execution of multiple operating systems.